/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.ModeloEmpresa;
import com.ipartek.formacion.gestformwww.modelo.ModeloProcedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.controlador.*;

import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Iratxe - Jon
 */
public class NuevoCandidatoAccion implements Accion
{

    /**
     * Descripción: ejecuta la acción de creado del candidato
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */
    private final String visualizarasignar = "crear-asignar-candidato-accion";
    private final String visualizarcandidato = "mostrar-candidato-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response)
    {
            AccionRouter router = null;
            AccionServlet as = (AccionServlet) servlet;
            HttpSession sesion = request.getSession();
            ModeloCandidato modelo = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
            Candidato candidato = new Candidato();
            ArrayList<String> errores = null;
            ArrayList<String> mensajes = new ArrayList<String>();
            ArrayList erroresEmpresa = new ArrayList();
            ArrayList erroresProcedencia = new ArrayList();
            Boolean nuevoCandidato = Verificador.sinReenvio("aleatorioNuevoCandidato", sesion, request);
            Boolean activo= false;
            int id = 0;

            if (sesion.getAttribute("usuario") == null) {
                router = new AccionRouter("inicio", false);
            } else {
                if (request.getMethod().equalsIgnoreCase("POST")) {
                   // <editor-fold defaultstate="collapsed" desc="Rellena el bean de candidato">
                    candidato.setCanNif(request.getParameter("canNIF"));
                    candidato.setCanNss(request.getParameter("canNSS"));
                    candidato.setCanNom(request.getParameter("canNom"));
                    candidato.setCanApe1(request.getParameter("canApe1"));
                    candidato.setCanApe2(request.getParameter("canApe2"));
                    candidato.setCanDir(request.getParameter("canDir"));
                    //candidato.setEstado(listaEstados.get(request.getParameter("estId")));
                    candidato.setCanLocalidad(request.getParameter("canLocalidad"));
                    candidato.setCanFechaNac(request.getParameter("canFechaNac"));
                    candidato.setCanTlf1(request.getParameter("canTlf1"));
                    candidato.setCanTlf2(request.getParameter("canTlf2"));
                    candidato.setCanMail(request.getParameter("canMail"));
                    candidato.setCanFechaNac(request.getParameter("canFechaNac"));
                    candidato.setCanObserv(request.getParameter("canObserv"));

                    if (request.getParameter("canActivo")!= null){
                        if ((request.getParameter("canActivo").equals("1"))){
                            activo= true;
                        }
                    }
                    candidato.setCanActivo(activo);

                 if (request.getParameter("empNom") != null && !request.getParameter("empNom").isEmpty()) {
                    String empNom = request.getParameter("empNom");
                    ModeloEmpresa mempresa = (ModeloEmpresa) servlet.getServletContext().getAttribute("ModeloEmpresa");
                    Empresa empresa = new Empresa();
                    empresa.setEmpNom(empNom);
                    erroresEmpresa = empresa.validar();
                    if (erroresEmpresa.isEmpty() && nuevoCandidato) {
                        try {
                           Integer idEmpresa = new Integer(mempresa.crearEmpresa(empresa));
                           candidato.setEmpId(idEmpresa);
                        }catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(CrearCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                           sesion.setAttribute("excepciones", ex.getMessage());
                        }
                    }
                 }else {
                    if (request.getParameter("Empresa") != null && Verificador.numeroValido(request.getParameter("Empresa"))) {
                        candidato.setEmpId(Integer.parseInt(request.getParameter("Empresa")));
                    }

                }
                if (request.getParameter("canId") != null && Verificador.numeroValido(request.getParameter("canId"))) {
                    candidato.setCanId(Integer.parseInt(request.getParameter("canId")));
                }
                if (request.getParameter("proNom") != null && !request.getParameter("proNom").isEmpty()) {
                    String proDescr = request.getParameter("proNom");
                    Procedencia pro = new Procedencia();
                    pro.setProDescr(proDescr);
                    ModeloProcedencia mprocedencia = (ModeloProcedencia) servlet.getServletContext().getAttribute("ModeloProcedencia");
                    erroresProcedencia = pro.validar();
                    if (erroresProcedencia.isEmpty() && nuevoCandidato) {
                        try {
                            Integer idProcedencia = mprocedencia.crearProcedencia(pro);
                            candidato.setProId(idProcedencia);
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(CrearCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }
                    }
                }else {
                    if (request.getParameter("Procedencia") != null && Verificador.numeroValido(request.getParameter("Procedencia"))) {
                        candidato.setProId(Integer.parseInt(request.getParameter("Procedencia")));
                    }
                }
                errores = candidato.validarCand();
                errores.addAll(erroresEmpresa);
                errores.addAll(erroresProcedencia);
                if (Verificador.numeroValido(request.getParameter("modificacionNuevo"))) {
                    candidato.setCanId(Integer.parseInt(request.getParameter("modificacionNuevo")));
                }
                if ((errores.isEmpty()) && (candidato.getCanId() != 0)) {
                    try {
                        int modificarCandidato = modelo.modificarCandidato(candidato);
                        if (modificarCandidato!= -1)
                        {
                            nuevoCandidato = false;
//                            candConv.setCanId(modificarCandidato);
//
//                            if (estado!= null)
//                            {
//                                candConv.setEstId(candidato.getEstado().getEstId());
//                            }
//                            if (request.getParameter("idCon")!= null){
//                                candConv.setConvId(Integer.parseInt(request.getParameter("idCon").trim()));
//                                modelo.modificarCandConv(candConv);
//                            }
                        }
                        //nuevoCandidato = false;
                        mensajes.add("mensaje-modificar-candidato");
                        sesion.setAttribute("mensajes", mensajes);
                        request.setAttribute("Candidato", candidato);
                        if (Verificador.numeroValido(request.getParameter("modificacionNuevo"))) {
                            try {
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcandidato), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                            } catch (ClassNotFoundException ex) {
                                Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InstantiationException ex) {
                                Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        request.setAttribute("Candidato", candidato);
                        sesion.setAttribute("excepciones", ex.getMessage());
                        try {
                            router = as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcandidato), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex1) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (InstantiationException ex1) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (IllegalAccessException ex1) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        }
                    }
                }

             /*
                if (id!=-1)
                        {
                            candconv.setCanId(id);
                            if (estado!=null)
                            {
                                candconv.setEstId(estado.getEstId());
                            }
                        }
                        if (request.getParameter("conId")!= null)
                                candconv.setConvId(Integer.parseInt(request.getParameter("conId").trim()));
                                modelo.insertarCandConv(candconv);
                    } catch (GestorFormacionExcepcion ex) {
              * Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                */

                if (errores.isEmpty() && nuevoCandidato) {
                    try {
                        id = modelo.crearCandidato(candidato);
                        if (id!= -1)
                        {
//                            candConv.setCanId(id);
//                            if (estado!= null)
//                            {
//                                candConv.setEstId(candidato.getEstado().getEstId());
//                            }
//                            if (request.getParameter("idCon")!= null){
//                              candConv.setConvId(Integer.parseInt(request.getParameter("idCon").trim()));
//                              modelo.insertarCandConv(candConv);
//                                if (candidato != null) {
//                                    candidato.setCanId(id);
//                                    request.setAttribute("candidatoAnterior", candidato);
//                                    request.setAttribute("Candidato", candidato);
//                                }
                        }                        
                        mensajes.add("mensaje-nuevo-candidato");
                        sesion.setAttribute("mensajes", mensajes);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        request.setAttribute("Candidato", candidato);
                        sesion.setAttribute("excepciones", ex.getMessage());
                        if (ex.getObjetoExcepcion() != null) {
                            request.setAttribute("candidatoAnterior", (Candidato) (ex.getObjetoExcepcion()));
                        }
                    }
                    try {
                        router = as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }else {
                    request.setAttribute("Candidato", candidato);
                    request.setAttribute("errores", errores);
                    if (request.getParameter("canId") != null) {
                        try {
                            router = as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcandidato), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }else {
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                }
             }else {
                try {
                    router = as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(NuevoCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
           }
       }
       return router;
  }
}
